Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Salve, ho da poco iniziato l'apprendimento dell' assembly con sintassi AT&T. Voglio provare a crea un programma, che faccia quanto segue: Data una stringa in input, stampare il suo contrario. In C io farei una cosa del genere:
Codice sorgente - presumibilmente C++
#include <stdio.h>
#include <string.h>
int main (void){
char stringa[20];
int i;
printf("Inserisci stringa: ");
fgets(stringa, sizeof(stringa), stdin);
stringa[strlen(stringa)-1]='\0';
printf("Stringa al contrario: ");
for(i =strlen(stringa); i >=0; i--){
printf("%c", stringa[i]);
}
printf("\n");
return0;
}
In assembly non riesco a capire come piazzare in un registro ad esempio l'ultimo carattere della stringa, il penultimo carattere della stringa, il terzultimo carattere della stringa, ecc. Io avevo pensato ad una cosa simile:
Codice sorgente - presumibilmente Plain Text
movb stringa[n], %ecx
ovvero spostare un byte a partire da stringa[n], nel registro ECX ma non funge... Soluzioni?
Ultima domanda che differenza c'è nello scrivere:
Codice sorgente - presumibilmente Altri Linguaggi
decl var
e
Codice sorgente - presumibilmente Plain Text
movl $var, %eax
decl %eax
Ultima modifica effettuata da Pitagora il 11/03/2011 alle 20:44
Rispondo all'ultima domanda: dec vuole un registro come argomento
riguardo a string[n], pensalo come *(string + n*sizeof(char)). In pratica ti basta mettere string in un registro, o meglio, l'indirizzo al primo elemento della stringa. Dopo in un altro registro metti 0. Dopodichè usi il meccanismo che ho scritto sopra per ottenere il valore a quell'indirizzo di memoria, e per scorrere la stringa basta che incrementi questo registro. Probabilmente ci sono modi migliori ma l'assembly non l'ho mai approfondito.